package com.sugon.modules.sys.utils;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.sugon.modules.sys.model.vo.DeviceOrganizationVO;

import java.util.ArrayList;
import java.util.List;

/**
 * @author ： YuXD
 * @description：
 * @date ： 2020-11-14 下午 6:51
 * @version: 1.0
 */
public class TreeNodeUtils {

    private List<DeviceOrganizationVO> DeviceOrganizationVOList;

    public TreeNodeUtils(List<DeviceOrganizationVO> DeviceOrganizationVOList) {
        this.DeviceOrganizationVOList = DeviceOrganizationVOList;
    }

    /**
     * 生成以id为根节点的树
     *
     * @param id
     * @return
     */
    public DeviceOrganizationVO generateTree(String id) {
        DeviceOrganizationVO root = getById(id);
        if (root != null) {
            List<DeviceOrganizationVO> childNodes = getChildrenById(id);
            if (CollectionUtil.isNotEmpty(childNodes)) {
                for (DeviceOrganizationVO node : childNodes) {
                    // 将子节点作为根，查找子节点的子节点
                    DeviceOrganizationVO childRoot = generateTree(node.getValue());
                    root.getChildren().add(childRoot);
                }
            }
        }
        return root;
    }

    /**
     * 根据id查找节点
     *
     * @param id
     * @return
     */
    private DeviceOrganizationVO getById(String id) {
        for (DeviceOrganizationVO node : DeviceOrganizationVOList) {
            if (node.getValue().equals(id)) {
                return node;
            }
        }
        return null;
    }

    /**
     * 根据id查找所有的子节点
     *
     * @param id
     * @return
     */
    private List getChildrenById(String id) {
        List<DeviceOrganizationVO> childNodes = new ArrayList<>();
        for (DeviceOrganizationVO node : DeviceOrganizationVOList) {
            if (StrUtil.equals(node.getParentValue(), id)) {
                childNodes.add(node);
            }
        }
        return childNodes;
    }
}
